<?php
/**
 * Используется в index.php для обработки исключений, возникших в процессе обработки.
 * Кроме того испульзуется в случае аварийного выключения скрипта
 * (на вызов этой функции заменены все exit в проекте)
 */

//@todo тут дырка.. надо сделать лучше, заменить параметр на куку или каккую либо подпись..
if (Debug::getInstance()->isDebugMode() || (isset($_GET['kvadshvabkadab']) && $_GET['kvadshvabkadab']=='mts_omlet')) {

	echo '<h1>An error occurred</h1><p>An error occurred; please try again later.</p>';
	
	// always show full information - They wish so
	if(true) {
		// Show exception
		if (isset($e) && $e instanceof Exception) {
			echo '<h2>Exception description</h2>';
			printf(
				'<p>Exception "%s" with message "%s" at %s line %u</p>',
				get_class($e), $e->getMessage(), $e->getFile(), $e->getLine()
			);
	
			// Show query for Zend_Db exception
			if ($e instanceof Zend_Db_Statement_Exception) {
				$query = Db::getInstance()->getLastQuery();
	
				echo '<ul>';
				echo "<li>MySQL Query: {$query['query']}</li>";
				echo '<li>Params: ' . Debug_TraceHelper::getVarAsString($query['params']) . '</li>';
				echo '</ul>';
			}
	
			echo '<ul>';
			foreach (Debug_TraceHelper::getStacktrace($e->getTrace()) as $t) {
				echo "<li>{$t}</li>";
			}
			echo '</ul>';
		}
	};
} else {
	//тут должна быть 500 ошибка
	header('HTTP/1.1 500 Internal Server Error');
	require_once(BASE_DIR.'/application/modules/default/views/error/500.tpl');
}


// logging
if (isset($e) && $e instanceof Exception) {
	$message = $e->getMessage();
	$refer = "";
	if(isset($_SERVER['HTTP_REFERER'])) $refer = $_SERVER['HTTP_REFERER'];
	if($message != "Debug shutdown" && $message != "This is AJAX-only action"){
		$str = "IP:". $_SERVER['REMOTE_ADDR'] . "/" . $_SERVER['HTTP_USER_AGENT'] . "\r\n" . " Request: " . $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']. "   FROM: " . $refer . "\r\n" . 'Exception "' . get_class($e) . '" with message "' . $e->getMessage() . '" at ' . $e->getFile() . ' line '. $e->getLine() ."\r\n". $e->getTraceAsString() . "\r\n";
		$logname = BASE_DIR . '/tmp/error.' . date("Y.m.d") . '.log';
		if (file_exists($logname)) 
			@chmod($logname, 0666);
			else umask(0000);
    if ($fp = fopen($logname, 'a')){
	  	fwrite($fp, $str);
	  	fclose($fp);
	  }
	}
}
